package com.demo.virtual_thread.selfRealize;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

//模拟虚线程的示例
public class CustomVirtualThreadSimulation {
	public static void main(String[] args) throws InterruptedException {
		System.out.println("=== 支持断点续跑的模拟虚线程示例 ===");

		// 创建调度器（运行在单个平台线程上）
		ResumableScheduler scheduler = new ResumableScheduler("main-scheduler");
		scheduler.start();

		// 创建 3 个载体任务，每个任务包含 3 个步骤
		for (int i = 0; i < 3; i++) {
			final int carrierId = i;
			// 定义任务的多个步骤（分段逻辑）
			List<Runnable> steps = new ArrayList<>();
			// 步骤 1：模拟处理
			steps.add(() -> {
				try {
					System.out.printf("载体 %s 步骤1：处理数据...%n", carrierId);
					TimeUnit.MILLISECONDS.sleep(50); // 模拟工作
				} catch (InterruptedException e) {
					Thread.currentThread().interrupt();
				}
			});
			// 步骤 2：模拟 IO 操作
			steps.add(() -> {
				try {
					System.out.printf("载体 %s 步骤2：等待IO响应...%n", carrierId);
					TimeUnit.MILLISECONDS.sleep(50); // 模拟 IO 等待
				} catch (InterruptedException e) {
					Thread.currentThread().interrupt();
				}
			});
			// 步骤 3：模拟结果处理
			steps.add(() -> {
				try {
					System.out.printf("载体 %s 步骤3：处理结果...%n", carrierId);
					TimeUnit.MILLISECONDS.sleep(50); // 模拟工作
				} catch (InterruptedException e) {
					Thread.currentThread().interrupt();
				}
			});

			// 创建载体并提交给调度器
			ResumableCarrier carrier = new ResumableCarrier("carrier-" + carrierId, steps);
			scheduler.submit(carrier);
		}

		// 等待所有任务完成
		while (!scheduler.isAllCompleted()) {
			TimeUnit.MILLISECONDS.sleep(100);
		}

		// 停止调度器
		scheduler.stop();
		System.out.println("=== 所有任务执行完成 ===");
	}
}